// pages/addZJJL/index.js
import {
  formatTime,
  back,
  required
} from '../../utils/util'
import Dialog from '@vant/weapp/dialog/dialog';
import {
  colors
} from '../../utils/constData'
import {
  allTypeByTree,
  getBelongBy,
  insert,
  delInfo,
  getInfo,
  getCustomCategory
} from '../../utils/api/zhichu'
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 主题颜色
    color: colors[0],
    // 备注输入框大小
    autosize: {
      maxHeight: 100,
      minHeight: 50
    },

    // 第一选择框数据配置---------------
    //原始数据
    typeOldList: [],
    //最近选择
    usually: [],
    // 类别数据源
    typeList: [{
        title: '一级类型',
        select: '',
        list: []
      },
      {
        title: '二级类型',
        select: '',
        list: []
      },
    ],
    // 第二展示框数据配置-------------------

    // 共享选择数据
    gongXList: [],
    // 日期弹框
    show: false,
    showDate: formatTime(new Date()),
    // 支付方式
    zhiFFSList: [],

    // 需要提交的数据---------
    form: {
      //onLoad初始化
      primaryType: [],
      shareBy: [],
      createDateStr: new Date().getTime(),
      payAmount: '',
      payType: [],
      remark: '',
    },
    //数据id 在编辑中才会有
    id: '',
    //保存
    loading: false

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const id = options && options.id
    // 初始化选择类型
    this.setData({
      id: id ? id : ''
    })
    //初始化分享对象
    this.getBelongBy()
    // 最近选择
    this.getCustomCategory()
    //初始化类型数据源
    Promise.all([this.typeByTree()]).then(() => {
      //修改 选择类型数据回显
      if (id) this.getInfo()
    })

  },

  // 初始数据--------------------------
  // typeTree
  typeByTree() {
    return new Promise(async (r) => {
      const res = await allTypeByTree({})
      //一级类型数据
      let list = []
      //二级类型数据
      let listChange = []
      res.forEach((item, index) => {
        list.push({
          ...item,
          childs: undefined
        })
        if (index === 0) {
          item.childs.forEach(ite => {
            listChange.push({
              ...ite,
              childs: null
            })
          })
        }
      })
      this.setData({
        typeOldList: res,
        ['typeList[0].list']: list,
        ['typeList[1].list']: listChange,
      })
      r()
    })
  },
  /**获取共享选择数据 */
  getBelongBy() {
    getBelongBy({
      flag: 0
    }).then(res => {
      let gongXList = res
      gongXList.map(item => item.value = item.userId)
      this.setData({
        gongXList
      })
      if (!this.data.id) {
        let value = wx.getStorageSync('addzhichuform')
        let arr = ['0']
        if (value) {
          arr = value.shareBy
        }
        this.setData({
          ['form.shareBy']: arr,
          ['form.payType']: ['0']
        })
      }
    })
  },
  /**最近选择 */
  getCustomCategory() {
    getCustomCategory().then(res => {
      this.setData({
        usually: res
      })
    })
  },

  // 子组件回调方法-------------------------------
  /**推荐选择类型 */
  clickSendMsg(e) {
    const {
      data
    } = e.detail
    let primaryType = this.primaryTypeFn(data.code)
    this.sendMsg({
      detail: {
        data: primaryType[0],
        pageIndex: 0
      }
    })
    this.setData({
      ['form.primaryType']: primaryType,
      [`typeList[0].select`]: primaryType[0],
      [`typeList[1].select`]: primaryType[1],
    })
  },
  /**选择类别
   * 返回pageIndex组件索引和item对象
   * 修改 显示选中typeList  和表单数据form.primaryType
   * 注：如果选择一级类型  则需要重置二级类型
   */
  sendMsg(e) {
    const {
      data,
      pageIndex
    } = e.detail
    //如果选择一级类型  则需要重置二级类型
    if (pageIndex === 0) {
      const key = `typeList[0].select`
      const formKey = `form.primaryType`
      this.setData({
        [key]: data,
        [formKey]: [data],
      })
      let list = this.data.typeOldList.filter(item => item.code === data.code)[0].childs
      list.map(item => item.childs = undefined)
      this.setData({
        ['typeList[1].select']: '',
        ['typeList[1].list']: list
      })
    } else {
      this.clickSendMsg(e)
    }
  },
  /**共享选择组件返回值 */
  selectFn(e) {
    this.setData({
      ['form.shareBy']: e.detail
    })
  },
  /**支付方式组件返回值 */
  selectpayTypeFn(e) {
    this.setData({
      ['form.payType']: e.detail
    })
  },
  /**支出日期组件返回值 */
  confirmDate(e) {
    let newDate = new Date(e.detail);
    this.setData({
      ['form.createDateStr']: e.detail,
      showDate: formatTime(newDate),
      show: false
    })
  },
  /**输入支出金额 */
  bindKeyInput: function (e) {
    this.setData({
      ['form.payAmount']: e.detail.value
    })
  },
  /**支付方式 */
  bindPickerChange: function (e) {
    const key = e.currentTarget.dataset.key
    const formKey = 'form.' + key
    this.setData({
      [formKey]: e.detail.value
    })
  },
  /**备注 */
  onChangefield(e) {
    this.setData({
      ['form.remark']: e.detail
    })
  },

  // 页面事件-----------------------------------
  /**支出日期 开启弹框 */
  showPopup() {
    this.setData({
      show: true
    });
  },
  /**支出日期 关闭弹框 */
  onClose() {
    this.setData({
      show: false
    });
  },

  /**保存 */
  save() {
    if (this.data.loading) return
    let data = this.data.form
    let datas = [data.primaryType[1], data.payAmount]
    let titles = ['请选择类型', '请输入金额']
    required(datas, titles)
    this.setData({
      loading: true
    })
    let obj = {
      //选择类型
      primaryType: data.primaryType[1].code,
      // 共享选择
      shareBy: data.shareBy.join(),
      // 支出日期
      createDateStr: data.createDateStr + '',
      // 支出金额
      payAmount: data.payAmount,
      // 支付方式
      payType: data.payType.join(),
      // 备注
      remark: data.remark,
    }
    if (this.data.id) {
      obj.payId = this.data.id
    }
    insert(obj).then(() => {
      let title = '添加成功'
      if (this.data.id) {
        title = '修改成功'
      }
      wx.setStorageSync('addzhichuform', {
        shareBy: data.shareBy
      })
      back(title)
    }).catch(() => {
      this.setData({
        loading: false
      })
    })
  },
  /**删除 */
  del() {
    Dialog.confirm({
        title: '警告',
        message: '确定删除该数据吗？',
      })
      .then(() => {
        delInfo({
          payId: this.data.id
        }).then(() => {
          back('删除成功')
        })
      })
  },

  // 数据处理 数据回显----------------------------
  /**编辑初始化数据 */
  async getInfo() {
    const data = await getInfo({
      payId: this.data.id
    })
    let obj = {
      //选择类型
      primaryType: data.primaryType,
      // 共享选择
      shareBy: data.shareBy.split(','),
      // 支出日期
      createDateStr: new Date(data.createDate).getTime(),
      // 支出金额
      payAmount: data.payAmount,
      // 支付方式
      payType: [data.payType],
      // 备注
      remark: data.remark,
    }
    this.setData({
      form: {
        ...obj
      },
      showDate: data.createDate.substring(0, data.createDate.length - 3)
    })
    this.clickSendMsg({
      detail: {
        data: {
          code: data.primaryType
        }
      }
    })
  },
  /**选择类型数据回显 */
  primaryTypeFn(v) {
    const list = this.data.typeOldList
    for (let i = 0; i < list.length; i++) {
      let item = list[i]
      for (let j = 0; j < item.childs.length; j++) {
        let ite = item.childs[j]
        if (ite.code == v) {
          return [{
            ...item,
            childs: undefined
          }, {
            ...ite,
            childs: undefined
          }]
        }
      }
    }
    return []
  },

})